// 引入events模块中的EventEmitter
const EventEmitter = require('events').EventEmitter;

// 定义Dog构造函数
function Dog(name, energy) {
    // 调用EventEmitter的构造函数，实现继承
    EventEmitter.call(this);
    // 给Dog对象添加name和energy属性
    this.name = name;
    this.energy = energy;
    // 定义intervalId用于存储定时器ID，方便后续清除定时器
    this.intervalId = null;
}

// 实现Dog对EventEmitter的继承，使Dog实例拥有EventEmitter的方法
Dog.prototype = Object.create(EventEmitter.prototype);
Dog.prototype.constructor = Dog;

// 给Dog原型添加bark方法，实现每隔1秒吠叫并减少能量的功能
Dog.prototype.bark = function () {
    const self = this;
    // 设置定时器，每隔1秒执行一次
    this.intervalId = setInterval(() => {
        // 当能量大于0时，输出吠叫信息，能量减1，并触发'bark'事件
        if (self.energy > 0) {
            console.log(`${self.name} barked! energy: ${self.energy}`);
            self.energy--;
            self.emit('bark');
        } else {
            // 当能量为0时，清除定时器，停止吠叫，并触发'stopBark'事件
            clearInterval(self.intervalId);
            self.emit('stopBark');
        }
    }, 1000);
};

// 导出Dog构造函数，供其他文件使用
module.exports = Dog;